function Shader(gl, vertSource, fragSource)
{
    function compileShader(src, type)
    {
        var sh = gl.createShader(type);
        checkWebGLError(gl);
        gl.shaderSource(sh, src);
        checkWebGLError(gl);
        gl.compileShader(sh);
        checkWebGLError(gl);
        var status = gl.getShaderParameter(sh, gl.COMPILE_STATUS);
        checkWebGLError(gl);
        if(!status)
        {
            var info = gl.getShaderInfoLog(sh);
            checkWebGLError(gl);
            throw ("Shader compiler error:\n" + info);
        }

        return sh;
    }
    
    this.vertex = compileShader(vertSource, gl.VERTEX_SHADER);

    this.fragment = compileShader(fragSource, gl.FRAGMENT_SHADER);

    this.program = gl.createProgram();
    
    checkWebGLError(gl);
    gl.attachShader(this.program, this.vertex);
    checkWebGLError(gl);
    gl.attachShader(this.program, this.fragment);
    checkWebGLError(gl);
    gl.linkProgram(this.program);
    checkWebGLError(gl);
    
    var status = gl.getProgramParameter(this.program, gl.LINK_STATUS);
    checkWebGLError(gl);
    if(!status)
    {
        var info = gl.GetProgramInfoLog(this.program);
        checkWebGLError(gl);
        throw ("Program linker error:\n" + info);
    }
}



